package com.siyougame.business.controller.admin.templateItem;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.siyougame.business.dal.dataobject.template.TemplateDO;
import com.siyougame.business.enums.TemplateItemStatusEnum;
import com.siyougame.business.service.template.TemplateService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.annotations.*;

import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;

import com.siyougame.common.pojo.PageResult;
import com.siyougame.common.pojo.CommonResult;
import static com.siyougame.common.pojo.CommonResult.success;

import com.siyougame.common.utils.ExcelUtils;

import com.siyougame.common.annotation.OperateLog;
import static com.siyougame.common.enums.OperateTypeEnum.*;

import com.siyougame.business.controller.admin.templateItem.vo.*;
import com.siyougame.business.dal.dataobject.templateItem.TemplateItemDO;
import com.siyougame.business.convert.templateItem.TemplateItemConvert;
import com.siyougame.business.service.templateItem.TemplateItemService;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.function.ServerResponse;

@Api(tags = "管理后台 - 二级模板明细")
@RestController
@RequestMapping("/openapi/business/template-item")
@Validated
public class TemplateItemController {
    @Resource
    private TemplateService templateService;
    @Resource
    private TemplateItemService templateItemService;

    //@PostMapping("/create")
    //@ApiOperation("创建二级模板明细")
    //@PreAuthorize("@ss.hasPermi('business:template-item:create')")
    //public CommonResult<Long> createTemplateItem(@Valid @RequestBody TemplateItemCreateReqVO createReqVO) {
    //    return success(templateItemService.createTemplateItem(createReqVO));
    //}
    //
    @PutMapping("/update")
    @ApiOperation("更新二级模板明细")
    public CommonResult<Boolean> updateTemplateItem(@Valid @RequestBody TemplateItemUpdateReqVO updateReqVO) {
        templateItemService.updateTemplateItem(updateReqVO);
        return success(true);
    }
    //
    @DeleteMapping("/delete")
    @ApiOperation("删除二级模板明细")

    public CommonResult<Boolean> deleteTemplateItem(@RequestParam("id") Long id) {
        templateItemService.deleteTemplateItem(id);
        return success(true);
    }
    //
    @GetMapping("/get")
    @ApiOperation("获得二级模板明细")

    public CommonResult<TemplateItemRespVO> getTemplateItem(@RequestParam("id") Long id) {
        TemplateItemDO templateItem = templateItemService.getTemplateItem(id);
        return success(TemplateItemConvert.INSTANCE.convert(templateItem));
    }

    @GetMapping("/list")
    @ApiOperation("获得二级模板明细列表")

    public CommonResult<List<TemplateItemRespVO>> getTemplateItemList(@RequestParam("ids") Collection<Long> ids) {
        List<TemplateItemDO> list = templateItemService.getTemplateItemList(ids);
        return success(TemplateItemConvert.INSTANCE.convertList(list));
    }

    @GetMapping("/page")

    public CommonResult<PageResult<TemplateItemRespVO>> getTemplateItemPage(@Valid TemplateItemPageReqVO pageVO) {
        PageResult<TemplateItemDO> pageResult = templateItemService.getTemplateItemPage(pageVO);
        return success(TemplateItemConvert.INSTANCE.convertPage(pageResult));
    }
    //
    //@GetMapping("/export-excel")
    //@ApiOperation("导出二级模板明细 Excel")
    //@PreAuthorize("@ss.hasPermi('business:template-item:export')")
    //@OperateLog(type = EXPORT)
    //public void exportTemplateItemExcel(@Valid TemplateItemExportReqVO exportReqVO,
    //          HttpServletResponse response) throws IOException {
    //    List<TemplateItemDO> list = templateItemService.getTemplateItemList(exportReqVO);
    //    // 导出 Excel
    //    List<TemplateItemExcelVO> datas = TemplateItemConvert.INSTANCE.convertList02(list);
    //    ExcelUtils.write(response, "二级模板明细.xls", "数据", TemplateItemExcelVO.class, datas);
    //}

    /**
     * 上传题目
     * @param file
     * @param tempId
     * @return
     * @throws Exception
     */
    @RequestMapping("/upload")
    public CommonResult upload(@RequestParam("file") MultipartFile file, @RequestParam("tempId") Long tempId) throws Exception {
        if (file.isEmpty()) {
            return CommonResult.error(-1,"上传文件不能为空!");
        }
        TemplateDO couponEntity = templateService.getById(tempId);
        if (null == couponEntity) {
            return CommonResult.error(-1,"模板信息错误!");
        }

        // 2.应用HUtool ExcelUtil获取ExcelReader指定输入流和sheet
        ExcelReader excelReader = ExcelUtil.getReader(file.getInputStream());
        // 可以加上表头验证
        // 3.读取第二行到最后一行数据
        List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());
        Set numSet = new HashSet();
        Map mapData = new HashMap();
        List<TemplateItemDO> templateItemDOS = new ArrayList<>();
        int i = 1;
        for (List<Object> objects : read) {
            String num = objects.get(0) == null ? null : objects.get(0).toString();
            String content = objects.get(1) == null ? null : objects.get(1).toString();
            TemplateItemDO templateItemDO = new TemplateItemDO();
            templateItemDO.setTempId(tempId);
            templateItemDO.setContent(content);
            templateItemDO.setStatus(TemplateItemStatusEnum.NORMAL.getCode());
            templateItemDO.setSortRank(num);
            templateItemDO.setOrdNum(i);
            templateItemDOS.add(templateItemDO);
            i++;
        }
        templateItemService.saveBatch(templateItemDOS);

        return CommonResult.success(true);
    }

}
